<?php
/**
 * 注释不留名,代码随便用
 * Date: 2019/5/27
 * Time: 15:23
 */

/**
 * 下划线转驼峰
 * step1.原字符串转小写,原字符串中的分隔符用空格替换,在字符串开头加上分隔符
 * step2.将字符串中每个单词的首字母转换为大写,再去空格,去字符串首部附加的分隔符.
 * @param $uncamelized_words
 * @param string $separator
 * @return string
 */
function toUnderScore($uncamelized_words, $separator = '_')
{
    $uncamelized_words = $separator . str_replace($separator, " ", strtolower($uncamelized_words));
    return ltrim(str_replace(" ", "", ucwords($uncamelized_words)), $separator);
}

/**
 * 驼峰命名转下划线命名
 * 小写和大写紧挨一起的地方,加上分隔符,然后全部转小写
 * @param $camelCaps
 * @param string $separator
 * @return string
 */
function toCamelCase($camelCaps, $separator = '_')
{
    return strtolower(preg_replace('/([a-z])([A-Z])/', "$1" . $separator . "$2", $camelCaps));
}

if (!function_exists('isMobile')) {
    function isMobile($mobile)
    {
        return preg_match('/^1\d{10}$/', $mobile) > 0;
    }
}

//if (!function_exists('isIdCard')) {
//    /**
//     * 验证身份证号
//     * @param $id
//     * @return bool
//     */
//    function isIdCard($id)
//    {
//        $id = strtoupper($id);
//        $regx = "/(^\d{15}$)|(^\d{17}([0-9]|X)$)/";
//        $arr_split = array();
//        if (!preg_match($regx, $id)) {
//            return FALSE;
//        }
//        if (15 == strlen($id)) //检查15位
//        {
//            $regx = "/^(\d{6})+(\d{2})+(\d{2})+(\d{2})+(\d{3})$/";
//
//            @preg_match($regx, $id, $arr_split);
//            //检查生日日期是否正确
//            $dtm_birth = "19" . $arr_split[2] . '/' . $arr_split[3] . '/' . $arr_split[4];
//            if (!strtotime($dtm_birth)) {
//                return FALSE;
//            } else {
//                return TRUE;
//            }
//        } else      //检查18位
//        {
//            $regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/";
//            @preg_match($regx, $id, $arr_split);
//            $dtm_birth = $arr_split[2] . '/' . $arr_split[3] . '/' . $arr_split[4];
//            if (!strtotime($dtm_birth)) //检查生日日期是否正确
//            {
//                return FALSE;
//            } else {
//                //检验18位身份证的校验码是否正确。
//                //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
//                $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
//                $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
//                $sign = 0;
//                for ($i = 0; $i < 17; $i++) {
//                    $b = (int)$id{$i};
//                    $w = $arr_int[$i];
//                    $sign += $b * $w;
//                }
//                $n = $sign % 11;
//                $val_num = $arr_ch[$n];
//                if ($val_num != substr($id, 17, 1)) {
//                    return FALSE;
//                } else {
//                    return TRUE;
//                }
//            }
//        }
//
//    }
//}

/**
 * 将远程路径转成本地路径
 */
function urlToSrc($url)
{
    $root_path = env('root_path');
    if (strpos($url, '/uploads/') === 0) {
        //如果是以/static/upload/开头
        return $root_path . 'public/' . $url;
    }
    $domain = request()->domain();
    $domain = preg_replace(["/http:\/\//", '/https:\/\//'], '', $domain);
    return preg_replace(["@http://" . $domain . "@", '@https://' . $domain . '@'], $root_path . 'public/', $url);
}

if(!function_exists('getRandomStr')){
    /**
     * 获得随机字符串
     * @param $len
     * @param $special
     * @return string       返回随机字符串
     */
    function getRandomStr($len, $special = false)
    {
        $chars = array(
            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
            "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
            "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
            "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
            "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
            "3", "4", "5", "6", "7", "8", "9"
        );

        if ($special) {
            $chars = array_merge($chars, array(
                "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
                "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
                "}", "<", ">", "~", "+", "=", ",", "."
            ));
        }
        $charsLen = count($chars) - 1;
        shuffle($chars);                            //打乱数组顺序
        $str = '';
        for ($i = 0; $i < $len; $i++) {
            $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
        }
        return $str;
    }

}

function getGoodsInfo($id)
{
    static $goods_list = [];
    if (empty($goods_list[$id])) {
        $goods_list[$id] = \app\common\model\Goods::get($id);
    }
    return $goods_list[$id];
}

/**
 * CURL模拟网络请求
 * @param string $method 请求方法
 * @param string $url 请求方法
 * @param array $options 请求参数[headers,data]
 * @return boolean|string
 */
function sendRequest($method, $url, $options = [])
{
    $curl = curl_init();
    // POST 数据设置
    if (strtolower($method) === 'post') {
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $options['data']);
    }
    // 请求超时设置
    if (isset($options['timeout']) && is_numeric($options['timeout'])) {
        curl_setopt($curl, CURLOPT_TIMEOUT, $options['timeout']);
    } else {
        curl_setopt($curl, CURLOPT_TIMEOUT, 60);
    }
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, array('Content-type: application/json'));
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    $content = curl_exec($curl);
    if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == '200') {
        $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
        $header = substr($content, 0, $headerSize);
        $body = substr($content, $headerSize);
    }
    curl_close($curl);
    $result = json_decode($body,true);
    return $result;
}